package com.coolingme.general;

/**
 * 抽象模板类，定义一套算法框架/流程
 *
 * @author wangyue
 * @date 2020-09-21 21:54
 */
public abstract class AbstractClass {

    /**
     * 子类必须按照此模板执行
     * final避免子类覆盖
     */
    public final void templateMethod() {
        this.step1();
        this.step2();
        this.step3();
    }

    /**
     * 可以选择实现的方法1
     */
    protected void step1() {
        System.out.println("step1...");
    }

    /**
     * 可以选择实现的方法2
     */
    protected void step2() {
        // pass
    }

    /**
     * 必须被实现的抽象方法3
     */
    abstract void step3();

}
